package unit8;

import java.util.Scanner;

public class Test {

	@SuppressWarnings("resource")
	public static void main(String[] args) {
		/*
		 * （一）项目功能分析： 1.我要订餐 2.查看餐袋 3.签收订单 4.删除订单 5.我要点赞 6.退出系统 
		 * （二）项目完成思路：
		 */
		/*
		 * （1）数据部分 ①订单信息 编号 姓名 所订菜品及份数 送餐地址 送餐日期 电话 订单状态 金额 
		 * 除编号外，均用数组存储。 提供若干测试数据。 
		 * ②菜品信息
		 * 编号 菜品名称 单价 点赞数 
		 * 除编号外，均用数组存储。 提供若干测试数据。
		 */
		// 存储订单信息
		String[] orderNameArr = new String[7];// 存用户的姓名信息 0 1 2 3 4 5 6
		String[] orderDishArr = new String[7];// 所订菜品及份数 0 1 2 3 4 5 6
												// 鱼香肉丝 3份
		String[] orderAddrArr = new String[7];// 送餐地址
		String[] orderDateArr = new String[7];// 送餐日期
		String[] orderTelArr = new String[7];// 电话
		int[] orderStatusArr = new int[7];// 订单状态 0已预订 1已完成 stats==0?"已预订":"已完成"
		double[] orderMoneyArr = new double[7];// 金额
		// 存储菜品信息
		String[] dishNameArr = new String[4];
		double[] dishPriceArr = new double[4];
		int[] dishPraiseArr = new int[4];

		// 测试数据
		dishNameArr[0] = "鱼香肉丝";
		dishPriceArr[0] = 39.99;
		dishNameArr[1] = "油炸臭豆腐";
		dishPriceArr[1] = 15;
		dishNameArr[2] = "锅包肉";
		dishPriceArr[2] = 45;
		dishNameArr[3] = "麻婆豆腐";
		dishPriceArr[3] = 37.88;

		orderNameArr[0] = "宋江";
		orderDishArr[0] = "鱼香肉丝 2份";
		orderAddrArr[0] = "北礼士路100号";
		orderDateArr[0] = "2020-09-25";
		orderTelArr[0] = "13987342809";
		orderStatusArr[0] = 1;
		orderMoneyArr[0] = 39.99 * 2;

		orderNameArr[1] = "吴用";
		orderDishArr[1] = "油炸臭豆腐 3份";
		orderAddrArr[1] = "北礼士路100号";
		orderDateArr[1] = "2020-09-26";
		orderTelArr[1] = "13987242809";
		orderMoneyArr[1] = 15 * 3;

		// 写业务逻辑
		/*
		 * 1.可以让用户循环输入--Scanner 循环控制结构 while 
		 * 2.各功能模块的完成顺序： ①退出系统模块。 ②查看餐袋模块。 ③签收订单模块。
		 * ④我要订餐模块。 ⑤我要点赞模块【为菜品点赞】。 ⑥删除订单模块。
		 */
		Scanner scanner = new Scanner(System.in);
		boolean flag = true;// 控制循环何时停下来
		String info1 = "我要订餐";
		String info2 = "查看餐袋";
		String info3 = "签收订单";
		String info4 = "删除订单";
		String info5 = "我要点赞";
		String info6 = "退出系统";
		int choice = 0;
		while (flag) {
			System.out.println("******欢迎您访问吃货联盟订餐系统******");
			System.out.println("1." + info1);
			System.out.println("2." + info2);
			System.out.println("3." + info3);
			System.out.println("4." + info4);
			System.out.println("5." + info5);
			System.out.println("6." + info6);
			// 提示用户输入
			System.out.print("请选择：");
			choice = scanner.nextInt();
			// 用switch-case判断用户的输入
			switch (choice) {
			case 1:
				System.out.println("您选择的是："+info1);
				/*
				 * for循环遍历所有订单信息，当用户名为null时，表示用户可以输入。
				 */
				for(int i=0;i<orderNameArr.length;i++) {
					if(orderNameArr[i]==null) {
						System.out.print("请输入用户名：");
						orderNameArr[i]=scanner.next();
						System.out.println("您可以选择的菜品有：");
						//请用户选择菜品信息--遍历菜品信息
						System.out.println("编号\t菜品名称\t单价\t点赞数");
						for(int j=0;j<dishNameArr.length;j++) {
							System.out.println((j+1)+"\t"+dishNameArr[j]+"\t"+
										String.format("%.2f", dishPriceArr[j])+
										"\t"+dishPraiseArr[j]+"赞");
						}
						System.out.print("请输入您要选择的菜品编号：");
						int index=scanner.nextInt();
						System.out.print("请输入您要点餐的份数：");
						int count=scanner.nextInt();
						//根据用户选择的菜品及份数，拼接订单里的菜品信息
						/*
						 * 在外层for循环里，当前的i的下标所对应的元素，用户名为null.
						 * 表示该数组元素里可以存入下单信息。
						 * 上面，已经输入了用户名。
						 * 接着，让用户根据提示选择菜品。
						 * 把用户输入的菜品编号及份数拼接起来。
						 * orderDishArr数组：表示订单里的菜品信息。
						 * orderDishArr[i]：表示当前所下的订单。
						 * dishNameArr：表示菜品名称
						 * dishNameArr[index-1]：表示用户刚才所选择的菜品。
						 * count：用户刚才所输入的份数。
						 */
						orderDishArr[i]=dishNameArr[index-1]+" "+count+"数";
						//计算出该订单的金额
						orderMoneyArr[i]=dishPriceArr[index-1]*count;
						//提示用户输入其他信息
						System.out.print("请输入送餐地址：");
						orderAddrArr[i]=scanner.next();
						System.out.print("请输入送餐日期[yyyy-MM-dd]：");
						orderDateArr[i]=scanner.next();
						System.out.print("请输入订餐人电话：");
						orderTelArr[i]=scanner.next();
						System.out.println("恭喜您订餐成功！");
						break;
					}
				}
				break;
			case 2:
				System.out.println("您选择的是："+info2);
				/*
				 * 编号 姓名 所订菜品及份数 送餐地址 送餐日期 电话 订单状态 金额
				 */				
				System.out.println("编号\t姓名\t所订菜品\t\t送餐地址\t\t\t送餐日期\t\t电话\t\t订单状态\t金额");
				for(int i=0;i<orderNameArr.length;i++) {
					//条件【分支】控制结构
					if(orderNameArr[i]!=null) {
						System.out.println((i+1)+"\t"+orderNameArr[i]+"\t"+orderDishArr[i]+
								"\t"+orderAddrArr[i]+"\t"+"\t"+orderDateArr[i]+
								"\t"+orderTelArr[i]+"\t"+(orderStatusArr[i]==0?"已预订":"已完成")
								+"\t"+String.format("%.2f", orderMoneyArr[i]));
					}
				}				
				break;
			case 3:
				System.out.println("您选择的是："+info3);
				/*
				 * 显示需要签收的订单；为此需要循环遍历餐袋里已预订的订单。
				 */
				boolean hasOrder=false;//表示是否存在需签收的订单；默认为false
				System.out.println("编号\t姓名\t所订菜品\t\t送餐地址\t\t\t送餐日期\t\t电话\t\t订单状态\t金额");
				for(int i=0;i<orderNameArr.length;i++) {
					//条件【分支】控制结构
					if(orderNameArr[i]!=null && orderStatusArr[i]==0) {
						hasOrder=true;//表示存在需签收的订单
						System.out.println((i+1)+"\t"+orderNameArr[i]+"\t"+orderDishArr[i]+
								"\t"+orderAddrArr[i]+"\t"+"\t"+orderDateArr[i]+
								"\t"+orderTelArr[i]+"\t"+(orderStatusArr[i]==0?"已预订":"已完成")
								+"\t"+String.format("%.2f", orderMoneyArr[i]));
					}
				}	
				//判断是否存在有需要签收的订单
				if(hasOrder) {
					//假如有多个未完成的订单，那么需要用户输入订单编号，予以有针对性地签收
					System.out.print("请输入您要签收的订单编号：");
					int index=scanner.nextInt();
					orderStatusArr[index-1]=1;//表示更改当前订单为已完成状态	
					System.out.println("恭喜您签收成功，欢迎继续下单！");
				}else {
					System.out.println("目前不存在需签收的订单，继续操作！");
				}				
				break;
			case 4:
				System.out.println("您选择的是："+info4);
				//遍历订单数组
				System.out.println("您可以删除的订单有：");
				System.out.println("编号\t姓名\t所订菜品\t\t送餐地址\t\t\t送餐日期\t\t电话\t\t订单状态\t金额");
				for(int i=0;i<orderNameArr.length;i++) {
					//如果用户名不为null，就显示;当前认为，已完成和已预订的都可以删除
					if(orderNameArr[i]!=null ) {
						System.out.println((i+1)+"\t"+orderNameArr[i]+"\t"+orderDishArr[i]+
								"\t"+orderAddrArr[i]+"\t"+"\t"+orderDateArr[i]+
								"\t"+orderTelArr[i]+"\t"+(orderStatusArr[i]==0?"已预订":"已完成")
								+"\t"+String.format("%.2f", orderMoneyArr[i]));						
					}					
				}
				System.out.print("请输入您要删除的订单编号：");
				int index4=scanner.nextInt();
				/*
				 * 如果用户输入数组的长度	
				 * 							x				
				 * 用户看到的订单编号	1	2	3	4	5	6	7
				 *    对应的数组下标	0	1	2	3	4	5	null
				 *    							^
				 *    						3	4	5	nullnull
				 *    		
				 */				
				if(index4==orderNameArr.length) {
					orderNameArr[index4-1]=null;
					orderAddrArr[index4-1]=null;
					orderDateArr[index4-1]=null;
					orderMoneyArr[index4-1]=0;
					orderStatusArr[index4-1]=0;
					orderTelArr[index4-1]=null;
				}else {
					for(int i=index4;i<=orderNameArr.length-1;i++) {
						if(orderNameArr[i]!=null) {
							orderNameArr[i-1]=orderNameArr[i];
							orderAddrArr[i-1]=orderAddrArr[i];
							orderDateArr[i-1]=orderDateArr[i];
							orderMoneyArr[i-1]=orderMoneyArr[i];
							orderStatusArr[i-1]=orderStatusArr[i];
							orderTelArr[i-1]=orderTelArr[i];
						}else {
							orderNameArr[i-1]=null;
							orderAddrArr[i-1]=null;
							orderDateArr[i-1]=null;
							orderMoneyArr[i-1]=0;
							orderStatusArr[i-1]=0;
							orderTelArr[i-1]=null;
							break;
						}
					}
				}
				
				System.out.println("编号为"+index4+"的订单已经删除成功！");
				
				
				break;
			case 5:
				System.out.println("您选择的是："+info5);
				System.out.println("菜品信息有：");
				System.out.println("编号\t菜品名称\t单价\t点赞数");
				for(int j=0;j<dishNameArr.length;j++) {
					System.out.println((j+1)+"\t"+dishNameArr[j]+"\t"+
								String.format("%.2f", dishPriceArr[j])+
								"\t"+dishPraiseArr[j]+"赞");
				}
				
				System.out.print("请输入您要点赞的菜品编号：");
				int index=scanner.nextInt();//InputMismatchException输入不匹配异常
				/*
				 * 如果用户输入了要点赞的菜品编号，就意味着这道菜的点赞数量要增1
				 */
				dishPraiseArr[index-1]+=1;
				System.out.println("恭喜您对"+dishNameArr[index-1]+"点赞成功！");
				System.out.println(dishNameArr[index-1]+"的当前最新的点赞数是："+dishPraiseArr[index-1]+"赞");
				break;
			case 6:
				System.out.println("您选择的是："+info6);
				System.out.println("欢迎下次光临！");
				flag=false;
				break;
			default:
				System.out.println("输入有误，请重新输入！");
				break;
			}

		}

	}

}
